---
slug: /extending
title: "Overview"
description: "In addition to providing a set of core functions and types, the Dagger API can also be extended with custom Dagger Functions and custom types."
---

The Dagger API is extensible and shareable by design.

- You can extend the [Dagger API](../getting-started/api.mdx) by creating Dagger modules
- You can also embed a [Dagger SDK](../getting-started/api/clients-sdk.mdx) directly into your application

Both approaches let you access Dagger features for container operations, secret management, and more.

## Modules

In addition to providing a set of core functions and types, the Dagger API can be extended with custom Dagger Functions and custom types. This is achieved by creating (or installing) Dagger modules. You are encouraged to write your own Dagger modules and share them with others.

When a Dagger module is loaded, the Dagger API is [dynamically extended](../reference/api/internals.mdx#dynamic-api-extension) with new Dagger Functions served by that module. So, after loading a Dagger module, an API client can now call all of the original core functions, plus the new Dagger Functions provided by that module.

Dagger also lets you import and reuse modules developed by your team, your organization or the broader Dagger community. The [Daggerverse](https://daggerverse.dev) is a free service run by Dagger, which indexes all publicly available Dagger modules and Dagger Functions, and lets you easily search and consume them.

## Custom applications

When using a Dagger SDK in your application:

1. Install the SDK for your preferred language
2. Initialize a Dagger client in your code
3. Use Dagger API methods to implement your workflow
4. Run your application with `dagger run`

The following SDKs are available for embedding Dagger into your application:

- [Go →](./custom-applications/go.mdx) Use the Dagger Go SDK to embed Dagger into your Go applications
- [TypeScript →](./custom-applications/typescript.mdx) Use the Dagger TypeScript SDK to embed Dagger into your TypeScript applications
- [Python →](./custom-applications/python.mdx) Use the Dagger Python SDK to embed Dagger into your Python applications
- [PHP →](./custom-applications/php.mdx) Use the Dagger PHP SDK to embed Dagger into your PHP applications

## Modules vs custom applications

Here is a quick summary of differences between these two approaches.

| Capability | Dagger modules | Custom applications |
|:---|---:|---:|
| Pre-initialized Dagger API client | ✅ | 🚫 |
| Direct host access | 🚫 | ✅ |
| Direct third-party module access | ✅ | 🚫 |
| Cross-language interoperability | ✅ | 🚫 |
